'''
    自动存取款机系统
    1. 内置账号信息
    2. 注册、登陆账号
        2.1 注册账号
            2.1.1 判断是否重名
        2.2 登陆账号
        2.3 修改密码
    3. 查询余额
    4. 取钱
    5. 存钱
    6. 退出系统
    7. 界面和交互
'''

# 1. 内置账号信息
cus_list = [
    {'name': 'zhangsan', 'password': '123456', 'money': 500},
    {'name': 'lisi', 'password': 'abcdef', 'money': 1000},
    {'name': 'wangwu', 'password': '654321', 'money': 800}]

# 2.1 注册账号
def cus_creat(name, password):
    cus_dict = {}
    cus_dict['name'] = name
    cus_dict['password'] = password
    cus_dict['money'] = 0
    cus_list.append(cus_dict)

# 2.1.1 判断是否重名，是则返回1，否则返回-1
def cus_creat_name(name):
    for cus_dict in cus_list:
        if name == cus_dict['name'] :
            return 1
    return -1

# 2.2 登陆账号
def cus_login(name, password):
    # 判断账号密码是否相符，是则返回对应列表ID，否则返回-1
    for id, cus_dict in enumerate(cus_list):
        if name == cus_dict['name'] and password == cus_dict['password']:
            return id
    return -1

# 2.3 修改密码
def cus_change_password(name, old_password, new_password):
    # 判断账号密码是否相符，是则修改旧密码，并返回对应列表ID，否则返回-1
    for id, cus_dict in enumerate(cus_list):
        if name == cus_dict['name'] and old_password == cus_dict['password']:
            cus_list[id]['password'] = new_password
            return id
    return -1

# 3. 查询余额
def cus_money(id):
    money = cus_list[id]['money']
    return money

# 4. 取钱
def wit_money(id, withdraw):
    cus_list[id]['money'] -= withdraw

# 5. 存钱
def dep_money(id, deposit):
    cus_list[id]['money'] += deposit

# 6. 退出系统
def login_out():
    pass

# 主程序
# 初始界面
while True:
    # 初始用户id为-1，若为-1则表示不存在此用户或账号密码错误
    id = -1
    print('='*12, '欢迎访问自动存取款机系统', '='*12, '\n')
    print('{:1}{:<14}{:<14}'.format('', '1. 注册账号', '2. 登陆'))
    print('{:1}{:<14}{:<14}'.format('', '3. 修改密码', '4. 退出系统'))
    key = input('请输入对应的选择：')

    # 注册账户
    if key == '1':
        print('\n', '=' * 40)
        print('=' * 12, '创建账户', '=' * 12, '\n')
        while True:
            name = input('请输入用户名:')
            if cus_creat_name(name) == 1:
                print('用户名已存在，请重新输入')
            else:
                break
        password = input('请设置新密码：')
        cus_creat(name, password)
        print('='*12, '账号创建成功！', '='*12)
        input('按回车返回登陆菜单')

    # 登陆
    elif key == '2':
        while id == -1:
            print('\n', '=' * 40)
            name = input('请输入你的用户名:')
            password = input('请输入密码：')
            id = cus_login(name, password)
            if id != -1:
                print('=' * 12, '登陆成功！', '=' * 12)
            else:
                print('=' * 12, '账号或用户名错误！', '=' * 12)
        break

    # 修改密码
    elif key == '3':
        name = input('请输入账号:')
        old_password = input('请输入旧密码：')
        new_password = input('请输入新密码：')
        id = cus_change_password(name, old_password, new_password)
        if id != -1:
            print('=' * 12, '修改成功，已帮您自动登录', '=' * 12)
            break
        else:
            print('=' * 12, '账户名或密码错误', '=' * 12)

    # 退出系统
    elif key == '4':
        print('=' * 12, '再见', '=' * 12)
        break
    else:
        print('=' * 12, '输入有误，请重新输入', '=' * 12, '\n')

# 初始化 key
key = ''
while True:
    # 若上一步选择退出，则此处直接break
    if id == -1:
        break
    print('')
    print('='*12, '欢迎登陆自动存取款机系统', '='*12, '\n')
    print('{:1}{:<14}{:<14}'.format('', '1. 查询余额', '2. 取款'))
    print('{:1}{:<14}{:<14}'.format('', '3. 存款　　', '4. 退出系统'))
    key = input('请输入对应的选择：')

    # 查询余额
    if key == '1':
        print('\n', '=' * 40)
        print('账户余额为：{:8}'.format(cus_money(id)), '元')
        print('='*12, '输入任意键返回主页', '='*12)
        input()

    # 取款
    elif key == '2':
        print('\n', '=' * 40)
        print('账户余额为：{:8}'.format(cus_money(id)), '元')
        withdraw = input('请输入您的取出的金额（元）：')
        withdraw = int(withdraw)
        # 判断是否取款成功，如果失败则返回上一页
        if withdraw <= cus_money(id):
            wit_money(id, withdraw)
            print('='*12, '取款成功', '='*12)
        else:
            print('=' * 12, '账户余额不足', '=' * 12)
        print('=' * 12, '输入任意键返回主页', '=' * 12)
        input()

    # 存款
    elif key == '3':
        print('\n', '='*40)
        deposit = input('请输入您的存入的金额（元）：')
        deposit = int(deposit)
        dep_money(id, deposit)
        print('=' * 12, '存款成功', '=' * 12)
        print('=' * 12, '输入任意键返回主页', '=' * 12)
        input()

    # 退出系统
    elif key == '4':
        print('=' * 12, '再见', '=' * 12)
        break
    else:
        print('=' * 12, '输入有误，请重新输入', '=' * 12, '\n')